/**
 * @file device_rgb_led.h
 * @author canrad (1517807724@qq.com)
 * @brief RGB LED灯的驱动
 *     初始化好了以后，直接使用rgb_led_set设置灯的亮灭即可
 * @version 1.1
 * @date 2024-07-28
 * update 2024-08-16
 *
 * @copyright Copyright (c) 2024
 *
 */
#ifndef MYLIB_DEVICE_RGB_LED_H
#define MYLIB_DEVICE_RGB_LED_H

#include <mylib/mylib_config.h>

#if PLATFORM_STM32
typedef struct
{
    GPIO_TypeDef* port_r;
    uint32_t      pin_r;
    GPIO_TypeDef* port_g;
    uint32_t      pin_g;
    GPIO_TypeDef* port_b;
    uint32_t      pin_b;
    int8_t valid;   // 标明这个灯是什么时候亮，如果为VALID_ON_HIGH_LEVEL，说明是高电平为有效
} rgb_led_t;
#elif PLATFORM_MSPM0
typedef struct
{
    GPIO_Regs* port_r;
    uint32_t   pin_r;
    GPIO_Regs* port_g;
    uint32_t   pin_g;
    GPIO_Regs* port_b;
    uint32_t   pin_b;
    int8_t valid;   // 标明这个灯是什么时候亮，如果为VALID_ON_HIGH_LEVEL，说明是高电平为有效
} rgb_led_t;
#endif

// 设备对象初始化器
#define DEVICE_RGB_LED_INITIALIZER(_port_r, _pin_r, _port_g, _pin_g, _port_b, _pin_b, _valid) \
    {                                                                                         \
        .port_r = _port_r,                                                                    \
        .pin_r  = _pin_r,                                                                     \
        .port_g = _port_g,                                                                    \
        .pin_g  = _pin_g,                                                                     \
        .port_b = _port_b,                                                                    \
        .pin_b  = _pin_b,                                                                     \
        .valid  = _valid,                                                                     \
    }

// 设置RGB灯，哪种颜色需要开启就填入true，不需要就填入false
void rgb_led_set(rgb_led_t* led, bool r, bool g, bool b);

#endif   // !DEVICE_RGB_LED_H
